package br.inf.battleship.v02;

import java.awt.Point;
import java.util.ArrayList;
import static java.lang.System.out;

public class BoardManager {

    public static final int TYPE_NONE = 6;            // nenhum navio
    public static final int TYPE_BOMBED = 9;
    public final int sizeOfBoard = 10;
    
    public int board[][]=new int[sizeOfBoard][sizeOfBoard];
    // ao iniciar o tabuleiro, aloca o tabuleiro zerado de com tamanho do mesmo
    public BoardManager() {
        for (int i = 0; i < sizeOfBoard; i++) {
            for (int j = 0; j < sizeOfBoard; j++) {
                board[i][j] = TYPE_NONE;
            }
        }
    }
    //verifica se o ponto esta livre no tabuleiro

    public boolean isFree(Point p) {
       return board[p.y][p.x] ==TYPE_NONE;
    }
    public boolean wasAttacked(Point p){
        return board[p.y][p.x] ==TYPE_BOMBED;
    }

    public boolean insertShip(Ship s) {
        int col = s.getPosition().x;
        int lin = s.getPosition().y;
        ArrayList points = new ArrayList();

        if(s.getDirection()=='v' && col+s.getSize()>9)return false; //* Verifica se há espaço
        if(s.getDirection()=='h' && lin+s.getSize()>9)return false; //* para o barco no mapa

        for(int i=0;i<s.getSize();i++){
            Point t = new Point(lin, col);
            if(!isFree(t))return false;         // caso não esteja livre
            points.add(t);                      // armazenando pontos para inserir no mapa
            if(s.getDirection()=='v')col++; else lin++;  // incrementando na direção correta
        }
        // Barco agora pode ser inserido no mapa

        col = s.getPosition().x;
        lin = s.getPosition().y;
        for(int i=0;i<s.getSize();i++){
            //System.out.println(s.size);
            Point t = (Point) points.get(i);    // pontos do barco
            board[col][lin] = s.getType();
            if(s.getDirection()=='v')col++; else lin++;  // incrementando na direção correta
        }
        return true;
    }

    public void printMap(String name) {
        out.println("Mapa do jogador: " +name);
        for (int y = 0; y < sizeOfBoard; y++) {
            for (int x = 0; x < sizeOfBoard; x++) {
                out.print(board[y][x]+" ");
            }
            out.println();
        }
    }
    public int getValueOfBoard(Point p){
        return board[p.y][p.x];
    }

    void setValueOfBoard(Point p,int TYPE_BOMBED) {
            board[p.y][p.x]=TYPE_BOMBED;
    }
    
}

